package pe.gob.mpfn.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.component.html.HtmlPanelGrid;
import javax.faces.context.FacesContext;
import javax.faces.convert.DateTimeConverter;
import javax.faces.validator.LengthValidator;
import org.primefaces.component.autocomplete.AutoComplete;
import org.primefaces.component.calendar.Calendar;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.inputtextarea.InputTextarea;
import org.primefaces.component.message.Message;
import org.primefaces.context.RequestContext;
import org.primefaces.event.CloseEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.roo.addon.jsf.managedbean.RooJsfManagedBean;
import org.springframework.roo.addon.serializable.RooSerializable;
import pe.gob.mpfn.controller.converter.ParteConverter;
import pe.gob.mpfn.controller.converter.TablaMaestraConverter;
import pe.gob.mpfn.model.DesarrolloProteccion;
import pe.gob.mpfn.model.Parte;
import pe.gob.mpfn.model.Proteccion;
import pe.gob.mpfn.model.TablaMaestra;
import pe.gob.mpfn.service.ParteService;
import pe.gob.mpfn.service.ProteccionService;
import pe.gob.mpfn.service.TablaMaestraService;

@ManagedBean(name = "proteccionBean")
@SessionScoped
@Configurable
@RooSerializable
@RooJsfManagedBean(entity = Proteccion.class, beanName = "proteccionBean")
public class ProteccionBean implements Serializable  {

	private static final long serialVersionUID = 1L;

	@Autowired
    ProteccionService proteccionService;

	@Autowired
    TablaMaestraService tablaMaestraService;

	@Autowired
    ParteService parteService;

	private String name = "Proteccions";

	private Proteccion proteccion;

	private List<Proteccion> allProteccions;

	private boolean dataVisible = false;

	private List<String> columns;

	private HtmlPanelGrid createPanelGrid;

	private HtmlPanelGrid editPanelGrid;

	private HtmlPanelGrid viewPanelGrid;

	private boolean createDialogVisible = false;

	private List<DesarrolloProteccion> selectedDesarrolloProteccions;

	@PostConstruct
    public void init() {
        columns = new ArrayList<String>();
        columns.add("datFechaInicio");
        columns.add("datFechaFin");
        columns.add("strObservaciones");
        columns.add("chrEstado");
    }

	public String getName() {
        return name;
    }

	public List<String> getColumns() {
        return columns;
    }

	public List<Proteccion> getAllProteccions() {
        return allProteccions;
    }

	public void setAllProteccions(List<Proteccion> allProteccions) {
        this.allProteccions = allProteccions;
    }

	public String findAllProteccions() {
        allProteccions = proteccionService.findAllProteccions();
        dataVisible = !allProteccions.isEmpty();
        return null;
    }

	public boolean isDataVisible() {
        return dataVisible;
    }

	public void setDataVisible(boolean dataVisible) {
        this.dataVisible = dataVisible;
    }

	public HtmlPanelGrid getCreatePanelGrid() {
        if (createPanelGrid == null) {
            createPanelGrid = populateCreatePanel();
        }
        return createPanelGrid;
    }

	public void setCreatePanelGrid(HtmlPanelGrid createPanelGrid) {
        this.createPanelGrid = createPanelGrid;
    }

	public HtmlPanelGrid getEditPanelGrid() {
        if (editPanelGrid == null) {
            editPanelGrid = populateEditPanel();
        }
        return editPanelGrid;
    }

	public void setEditPanelGrid(HtmlPanelGrid editPanelGrid) {
        this.editPanelGrid = editPanelGrid;
    }

	public HtmlPanelGrid getViewPanelGrid() {
        if (viewPanelGrid == null) {
            viewPanelGrid = populateViewPanel();
        }
        return viewPanelGrid;
    }

	public void setViewPanelGrid(HtmlPanelGrid viewPanelGrid) {
        this.viewPanelGrid = viewPanelGrid;
    }

	public HtmlPanelGrid populateCreatePanel() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        Application application = facesContext.getApplication();
        ExpressionFactory expressionFactory = application.getExpressionFactory();
        ELContext elContext = facesContext.getELContext();
        
        HtmlPanelGrid htmlPanelGrid = (HtmlPanelGrid) application.createComponent(HtmlPanelGrid.COMPONENT_TYPE);
        
        HtmlOutputText desarrolloProteccionsCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        desarrolloProteccionsCreateOutput.setId("desarrolloProteccionsCreateOutput");
        desarrolloProteccionsCreateOutput.setValue("Desarrollo Proteccions:   ");
        htmlPanelGrid.getChildren().add(desarrolloProteccionsCreateOutput);
        
        HtmlOutputText desarrolloProteccionsCreateInput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        desarrolloProteccionsCreateInput.setId("desarrolloProteccionsCreateInput");
        desarrolloProteccionsCreateInput.setValue("This relationship is managed from the DesarrolloProteccion side");
        htmlPanelGrid.getChildren().add(desarrolloProteccionsCreateInput);
        
        Message desarrolloProteccionsCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        desarrolloProteccionsCreateInputMessage.setId("desarrolloProteccionsCreateInputMessage");
        desarrolloProteccionsCreateInputMessage.setFor("desarrolloProteccionsCreateInput");
        desarrolloProteccionsCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(desarrolloProteccionsCreateInputMessage);
        
        HtmlOutputText intTipoProteccionIdCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intTipoProteccionIdCreateOutput.setId("intTipoProteccionIdCreateOutput");
        intTipoProteccionIdCreateOutput.setValue("Int Tipo Proteccion Id:   ");
        htmlPanelGrid.getChildren().add(intTipoProteccionIdCreateOutput);
        
        AutoComplete intTipoProteccionIdCreateInput = (AutoComplete) application.createComponent(AutoComplete.COMPONENT_TYPE);
        intTipoProteccionIdCreateInput.setId("intTipoProteccionIdCreateInput");
        intTipoProteccionIdCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.intTipoProteccionId}", TablaMaestra.class));
        intTipoProteccionIdCreateInput.setCompleteMethod(expressionFactory.createMethodExpression(elContext, "#{proteccionBean.completeIntTipoProteccionId}", List.class, new Class[] { String.class }));
        intTipoProteccionIdCreateInput.setDropdown(true);
        intTipoProteccionIdCreateInput.setValueExpression("var", expressionFactory.createValueExpression(elContext, "intTipoProteccionId", String.class));
        intTipoProteccionIdCreateInput.setValueExpression("itemLabel", expressionFactory.createValueExpression(elContext, "#{intTipoProteccionId.strDescripcion} #{intTipoProteccionId.chrEstado} #{intTipoProteccionId.intTablaId}", String.class));
        intTipoProteccionIdCreateInput.setValueExpression("itemValue", expressionFactory.createValueExpression(elContext, "#{intTipoProteccionId}", TablaMaestra.class));
        intTipoProteccionIdCreateInput.setConverter(new TablaMaestraConverter());
        intTipoProteccionIdCreateInput.setRequired(false);
        htmlPanelGrid.getChildren().add(intTipoProteccionIdCreateInput);
        
        Message intTipoProteccionIdCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        intTipoProteccionIdCreateInputMessage.setId("intTipoProteccionIdCreateInputMessage");
        intTipoProteccionIdCreateInputMessage.setFor("intTipoProteccionIdCreateInput");
        intTipoProteccionIdCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(intTipoProteccionIdCreateInputMessage);
        
        HtmlOutputText intDependenciaOrigenIdCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intDependenciaOrigenIdCreateOutput.setId("intDependenciaOrigenIdCreateOutput");
        intDependenciaOrigenIdCreateOutput.setValue("Int Dependencia Origen Id:   ");
        htmlPanelGrid.getChildren().add(intDependenciaOrigenIdCreateOutput);
        
        AutoComplete intDependenciaOrigenIdCreateInput = (AutoComplete) application.createComponent(AutoComplete.COMPONENT_TYPE);
        intDependenciaOrigenIdCreateInput.setId("intDependenciaOrigenIdCreateInput");
        intDependenciaOrigenIdCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.intDependenciaOrigenId}", TablaMaestra.class));
        intDependenciaOrigenIdCreateInput.setCompleteMethod(expressionFactory.createMethodExpression(elContext, "#{proteccionBean.completeIntDependenciaOrigenId}", List.class, new Class[] { String.class }));
        intDependenciaOrigenIdCreateInput.setDropdown(true);
        intDependenciaOrigenIdCreateInput.setValueExpression("var", expressionFactory.createValueExpression(elContext, "intDependenciaOrigenId", String.class));
        intDependenciaOrigenIdCreateInput.setValueExpression("itemLabel", expressionFactory.createValueExpression(elContext, "#{intDependenciaOrigenId.strDescripcion} #{intDependenciaOrigenId.chrEstado} #{intDependenciaOrigenId.intTablaId}", String.class));
        intDependenciaOrigenIdCreateInput.setValueExpression("itemValue", expressionFactory.createValueExpression(elContext, "#{intDependenciaOrigenId}", TablaMaestra.class));
        intDependenciaOrigenIdCreateInput.setConverter(new TablaMaestraConverter());
        intDependenciaOrigenIdCreateInput.setRequired(false);
        htmlPanelGrid.getChildren().add(intDependenciaOrigenIdCreateInput);
        
        Message intDependenciaOrigenIdCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        intDependenciaOrigenIdCreateInputMessage.setId("intDependenciaOrigenIdCreateInputMessage");
        intDependenciaOrigenIdCreateInputMessage.setFor("intDependenciaOrigenIdCreateInput");
        intDependenciaOrigenIdCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(intDependenciaOrigenIdCreateInputMessage);
        
        HtmlOutputText intDependenciaDestinoIdCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intDependenciaDestinoIdCreateOutput.setId("intDependenciaDestinoIdCreateOutput");
        intDependenciaDestinoIdCreateOutput.setValue("Int Dependencia Destino Id:   ");
        htmlPanelGrid.getChildren().add(intDependenciaDestinoIdCreateOutput);
        
        AutoComplete intDependenciaDestinoIdCreateInput = (AutoComplete) application.createComponent(AutoComplete.COMPONENT_TYPE);
        intDependenciaDestinoIdCreateInput.setId("intDependenciaDestinoIdCreateInput");
        intDependenciaDestinoIdCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.intDependenciaDestinoId}", TablaMaestra.class));
        intDependenciaDestinoIdCreateInput.setCompleteMethod(expressionFactory.createMethodExpression(elContext, "#{proteccionBean.completeIntDependenciaDestinoId}", List.class, new Class[] { String.class }));
        intDependenciaDestinoIdCreateInput.setDropdown(true);
        intDependenciaDestinoIdCreateInput.setValueExpression("var", expressionFactory.createValueExpression(elContext, "intDependenciaDestinoId", String.class));
        intDependenciaDestinoIdCreateInput.setValueExpression("itemLabel", expressionFactory.createValueExpression(elContext, "#{intDependenciaDestinoId.strDescripcion} #{intDependenciaDestinoId.chrEstado} #{intDependenciaDestinoId.intTablaId}", String.class));
        intDependenciaDestinoIdCreateInput.setValueExpression("itemValue", expressionFactory.createValueExpression(elContext, "#{intDependenciaDestinoId}", TablaMaestra.class));
        intDependenciaDestinoIdCreateInput.setConverter(new TablaMaestraConverter());
        intDependenciaDestinoIdCreateInput.setRequired(false);
        htmlPanelGrid.getChildren().add(intDependenciaDestinoIdCreateInput);
        
        Message intDependenciaDestinoIdCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        intDependenciaDestinoIdCreateInputMessage.setId("intDependenciaDestinoIdCreateInputMessage");
        intDependenciaDestinoIdCreateInputMessage.setFor("intDependenciaDestinoIdCreateInput");
        intDependenciaDestinoIdCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(intDependenciaDestinoIdCreateInputMessage);
        
        HtmlOutputText intParteIdCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intParteIdCreateOutput.setId("intParteIdCreateOutput");
        intParteIdCreateOutput.setValue("Int Parte Id:   ");
        htmlPanelGrid.getChildren().add(intParteIdCreateOutput);
        
        AutoComplete intParteIdCreateInput = (AutoComplete) application.createComponent(AutoComplete.COMPONENT_TYPE);
        intParteIdCreateInput.setId("intParteIdCreateInput");
        intParteIdCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.intParteId}", Parte.class));
        intParteIdCreateInput.setCompleteMethod(expressionFactory.createMethodExpression(elContext, "#{proteccionBean.completeIntParteId}", List.class, new Class[] { String.class }));
        intParteIdCreateInput.setDropdown(true);
        intParteIdCreateInput.setValueExpression("var", expressionFactory.createValueExpression(elContext, "intParteId", String.class));
        intParteIdCreateInput.setValueExpression("itemLabel", expressionFactory.createValueExpression(elContext, "#{intParteId.strNombre} #{intParteId.strApellidoParterno} #{intParteId.strApellidoMaterno} #{intParteId.intEdad}", String.class));
        intParteIdCreateInput.setValueExpression("itemValue", expressionFactory.createValueExpression(elContext, "#{intParteId}", Parte.class));
        intParteIdCreateInput.setConverter(new ParteConverter());
        intParteIdCreateInput.setRequired(false);
        htmlPanelGrid.getChildren().add(intParteIdCreateInput);
        
        Message intParteIdCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        intParteIdCreateInputMessage.setId("intParteIdCreateInputMessage");
        intParteIdCreateInputMessage.setFor("intParteIdCreateInput");
        intParteIdCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(intParteIdCreateInputMessage);
        
        HtmlOutputText datFechaInicioCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        datFechaInicioCreateOutput.setId("datFechaInicioCreateOutput");
        datFechaInicioCreateOutput.setValue("Dat Fecha Inicio: * ");
        htmlPanelGrid.getChildren().add(datFechaInicioCreateOutput);
        
        Calendar datFechaInicioCreateInput = (Calendar) application.createComponent(Calendar.COMPONENT_TYPE);
        datFechaInicioCreateInput.setId("datFechaInicioCreateInput");
        datFechaInicioCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.datFechaInicio}", Date.class));
        datFechaInicioCreateInput.setNavigator(true);
        datFechaInicioCreateInput.setEffect("slideDown");
        datFechaInicioCreateInput.setPattern("dd/MM/yyyy");
        datFechaInicioCreateInput.setRequired(true);
        htmlPanelGrid.getChildren().add(datFechaInicioCreateInput);
        
        Message datFechaInicioCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        datFechaInicioCreateInputMessage.setId("datFechaInicioCreateInputMessage");
        datFechaInicioCreateInputMessage.setFor("datFechaInicioCreateInput");
        datFechaInicioCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(datFechaInicioCreateInputMessage);
        
        HtmlOutputText datFechaFinCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        datFechaFinCreateOutput.setId("datFechaFinCreateOutput");
        datFechaFinCreateOutput.setValue("Dat Fecha Fin: * ");
        htmlPanelGrid.getChildren().add(datFechaFinCreateOutput);
        
        Calendar datFechaFinCreateInput = (Calendar) application.createComponent(Calendar.COMPONENT_TYPE);
        datFechaFinCreateInput.setId("datFechaFinCreateInput");
        datFechaFinCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.datFechaFin}", Date.class));
        datFechaFinCreateInput.setNavigator(true);
        datFechaFinCreateInput.setEffect("slideDown");
        datFechaFinCreateInput.setPattern("dd/MM/yyyy");
        datFechaFinCreateInput.setRequired(true);
        htmlPanelGrid.getChildren().add(datFechaFinCreateInput);
        
        Message datFechaFinCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        datFechaFinCreateInputMessage.setId("datFechaFinCreateInputMessage");
        datFechaFinCreateInputMessage.setFor("datFechaFinCreateInput");
        datFechaFinCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(datFechaFinCreateInputMessage);
        
        HtmlOutputText strObservacionesCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        strObservacionesCreateOutput.setId("strObservacionesCreateOutput");
        strObservacionesCreateOutput.setValue("Str Observaciones: * ");
        htmlPanelGrid.getChildren().add(strObservacionesCreateOutput);
        
        InputTextarea strObservacionesCreateInput = (InputTextarea) application.createComponent(InputTextarea.COMPONENT_TYPE);
        strObservacionesCreateInput.setId("strObservacionesCreateInput");
        strObservacionesCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.strObservaciones}", String.class));
        LengthValidator strObservacionesCreateInputValidator = new LengthValidator();
        strObservacionesCreateInputValidator.setMaximum(200);
        strObservacionesCreateInput.addValidator(strObservacionesCreateInputValidator);
        strObservacionesCreateInput.setRequired(true);
        htmlPanelGrid.getChildren().add(strObservacionesCreateInput);
        
        Message strObservacionesCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        strObservacionesCreateInputMessage.setId("strObservacionesCreateInputMessage");
        strObservacionesCreateInputMessage.setFor("strObservacionesCreateInput");
        strObservacionesCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(strObservacionesCreateInputMessage);
        
        HtmlOutputText chrEstadoCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        chrEstadoCreateOutput.setId("chrEstadoCreateOutput");
        chrEstadoCreateOutput.setValue("Chr Estado: * ");
        htmlPanelGrid.getChildren().add(chrEstadoCreateOutput);
        
        InputText chrEstadoCreateInput = (InputText) application.createComponent(InputText.COMPONENT_TYPE);
        chrEstadoCreateInput.setId("chrEstadoCreateInput");
        chrEstadoCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.chrEstado}", Character.class));
        chrEstadoCreateInput.setRequired(true);
        htmlPanelGrid.getChildren().add(chrEstadoCreateInput);
        
        Message chrEstadoCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        chrEstadoCreateInputMessage.setId("chrEstadoCreateInputMessage");
        chrEstadoCreateInputMessage.setFor("chrEstadoCreateInput");
        chrEstadoCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(chrEstadoCreateInputMessage);
        
        return htmlPanelGrid;
    }

	public HtmlPanelGrid populateEditPanel() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        Application application = facesContext.getApplication();
        ExpressionFactory expressionFactory = application.getExpressionFactory();
        ELContext elContext = facesContext.getELContext();
        
        HtmlPanelGrid htmlPanelGrid = (HtmlPanelGrid) application.createComponent(HtmlPanelGrid.COMPONENT_TYPE);
        
        HtmlOutputText desarrolloProteccionsEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        desarrolloProteccionsEditOutput.setId("desarrolloProteccionsEditOutput");
        desarrolloProteccionsEditOutput.setValue("Desarrollo Proteccions:   ");
        htmlPanelGrid.getChildren().add(desarrolloProteccionsEditOutput);
        
        HtmlOutputText desarrolloProteccionsEditInput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        desarrolloProteccionsEditInput.setId("desarrolloProteccionsEditInput");
        desarrolloProteccionsEditInput.setValue("This relationship is managed from the DesarrolloProteccion side");
        htmlPanelGrid.getChildren().add(desarrolloProteccionsEditInput);
        
        Message desarrolloProteccionsEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        desarrolloProteccionsEditInputMessage.setId("desarrolloProteccionsEditInputMessage");
        desarrolloProteccionsEditInputMessage.setFor("desarrolloProteccionsEditInput");
        desarrolloProteccionsEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(desarrolloProteccionsEditInputMessage);
        
        HtmlOutputText intTipoProteccionIdEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intTipoProteccionIdEditOutput.setId("intTipoProteccionIdEditOutput");
        intTipoProteccionIdEditOutput.setValue("Int Tipo Proteccion Id:   ");
        htmlPanelGrid.getChildren().add(intTipoProteccionIdEditOutput);
        
        AutoComplete intTipoProteccionIdEditInput = (AutoComplete) application.createComponent(AutoComplete.COMPONENT_TYPE);
        intTipoProteccionIdEditInput.setId("intTipoProteccionIdEditInput");
        intTipoProteccionIdEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.intTipoProteccionId}", TablaMaestra.class));
        intTipoProteccionIdEditInput.setCompleteMethod(expressionFactory.createMethodExpression(elContext, "#{proteccionBean.completeIntTipoProteccionId}", List.class, new Class[] { String.class }));
        intTipoProteccionIdEditInput.setDropdown(true);
        intTipoProteccionIdEditInput.setValueExpression("var", expressionFactory.createValueExpression(elContext, "intTipoProteccionId", String.class));
        intTipoProteccionIdEditInput.setValueExpression("itemLabel", expressionFactory.createValueExpression(elContext, "#{intTipoProteccionId.strDescripcion} #{intTipoProteccionId.chrEstado} #{intTipoProteccionId.intTablaId}", String.class));
        intTipoProteccionIdEditInput.setValueExpression("itemValue", expressionFactory.createValueExpression(elContext, "#{intTipoProteccionId}", TablaMaestra.class));
        intTipoProteccionIdEditInput.setConverter(new TablaMaestraConverter());
        intTipoProteccionIdEditInput.setRequired(false);
        htmlPanelGrid.getChildren().add(intTipoProteccionIdEditInput);
        
        Message intTipoProteccionIdEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        intTipoProteccionIdEditInputMessage.setId("intTipoProteccionIdEditInputMessage");
        intTipoProteccionIdEditInputMessage.setFor("intTipoProteccionIdEditInput");
        intTipoProteccionIdEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(intTipoProteccionIdEditInputMessage);
        
        HtmlOutputText intDependenciaOrigenIdEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intDependenciaOrigenIdEditOutput.setId("intDependenciaOrigenIdEditOutput");
        intDependenciaOrigenIdEditOutput.setValue("Int Dependencia Origen Id:   ");
        htmlPanelGrid.getChildren().add(intDependenciaOrigenIdEditOutput);
        
        AutoComplete intDependenciaOrigenIdEditInput = (AutoComplete) application.createComponent(AutoComplete.COMPONENT_TYPE);
        intDependenciaOrigenIdEditInput.setId("intDependenciaOrigenIdEditInput");
        intDependenciaOrigenIdEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.intDependenciaOrigenId}", TablaMaestra.class));
        intDependenciaOrigenIdEditInput.setCompleteMethod(expressionFactory.createMethodExpression(elContext, "#{proteccionBean.completeIntDependenciaOrigenId}", List.class, new Class[] { String.class }));
        intDependenciaOrigenIdEditInput.setDropdown(true);
        intDependenciaOrigenIdEditInput.setValueExpression("var", expressionFactory.createValueExpression(elContext, "intDependenciaOrigenId", String.class));
        intDependenciaOrigenIdEditInput.setValueExpression("itemLabel", expressionFactory.createValueExpression(elContext, "#{intDependenciaOrigenId.strDescripcion} #{intDependenciaOrigenId.chrEstado} #{intDependenciaOrigenId.intTablaId}", String.class));
        intDependenciaOrigenIdEditInput.setValueExpression("itemValue", expressionFactory.createValueExpression(elContext, "#{intDependenciaOrigenId}", TablaMaestra.class));
        intDependenciaOrigenIdEditInput.setConverter(new TablaMaestraConverter());
        intDependenciaOrigenIdEditInput.setRequired(false);
        htmlPanelGrid.getChildren().add(intDependenciaOrigenIdEditInput);
        
        Message intDependenciaOrigenIdEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        intDependenciaOrigenIdEditInputMessage.setId("intDependenciaOrigenIdEditInputMessage");
        intDependenciaOrigenIdEditInputMessage.setFor("intDependenciaOrigenIdEditInput");
        intDependenciaOrigenIdEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(intDependenciaOrigenIdEditInputMessage);
        
        HtmlOutputText intDependenciaDestinoIdEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intDependenciaDestinoIdEditOutput.setId("intDependenciaDestinoIdEditOutput");
        intDependenciaDestinoIdEditOutput.setValue("Int Dependencia Destino Id:   ");
        htmlPanelGrid.getChildren().add(intDependenciaDestinoIdEditOutput);
        
        AutoComplete intDependenciaDestinoIdEditInput = (AutoComplete) application.createComponent(AutoComplete.COMPONENT_TYPE);
        intDependenciaDestinoIdEditInput.setId("intDependenciaDestinoIdEditInput");
        intDependenciaDestinoIdEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.intDependenciaDestinoId}", TablaMaestra.class));
        intDependenciaDestinoIdEditInput.setCompleteMethod(expressionFactory.createMethodExpression(elContext, "#{proteccionBean.completeIntDependenciaDestinoId}", List.class, new Class[] { String.class }));
        intDependenciaDestinoIdEditInput.setDropdown(true);
        intDependenciaDestinoIdEditInput.setValueExpression("var", expressionFactory.createValueExpression(elContext, "intDependenciaDestinoId", String.class));
        intDependenciaDestinoIdEditInput.setValueExpression("itemLabel", expressionFactory.createValueExpression(elContext, "#{intDependenciaDestinoId.strDescripcion} #{intDependenciaDestinoId.chrEstado} #{intDependenciaDestinoId.intTablaId}", String.class));
        intDependenciaDestinoIdEditInput.setValueExpression("itemValue", expressionFactory.createValueExpression(elContext, "#{intDependenciaDestinoId}", TablaMaestra.class));
        intDependenciaDestinoIdEditInput.setConverter(new TablaMaestraConverter());
        intDependenciaDestinoIdEditInput.setRequired(false);
        htmlPanelGrid.getChildren().add(intDependenciaDestinoIdEditInput);
        
        Message intDependenciaDestinoIdEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        intDependenciaDestinoIdEditInputMessage.setId("intDependenciaDestinoIdEditInputMessage");
        intDependenciaDestinoIdEditInputMessage.setFor("intDependenciaDestinoIdEditInput");
        intDependenciaDestinoIdEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(intDependenciaDestinoIdEditInputMessage);
        
        HtmlOutputText intParteIdEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intParteIdEditOutput.setId("intParteIdEditOutput");
        intParteIdEditOutput.setValue("Int Parte Id:   ");
        htmlPanelGrid.getChildren().add(intParteIdEditOutput);
        
        AutoComplete intParteIdEditInput = (AutoComplete) application.createComponent(AutoComplete.COMPONENT_TYPE);
        intParteIdEditInput.setId("intParteIdEditInput");
        intParteIdEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.intParteId}", Parte.class));
        intParteIdEditInput.setCompleteMethod(expressionFactory.createMethodExpression(elContext, "#{proteccionBean.completeIntParteId}", List.class, new Class[] { String.class }));
        intParteIdEditInput.setDropdown(true);
        intParteIdEditInput.setValueExpression("var", expressionFactory.createValueExpression(elContext, "intParteId", String.class));
        intParteIdEditInput.setValueExpression("itemLabel", expressionFactory.createValueExpression(elContext, "#{intParteId.strNombre} #{intParteId.strApellidoParterno} #{intParteId.strApellidoMaterno} #{intParteId.intEdad}", String.class));
        intParteIdEditInput.setValueExpression("itemValue", expressionFactory.createValueExpression(elContext, "#{intParteId}", Parte.class));
        intParteIdEditInput.setConverter(new ParteConverter());
        intParteIdEditInput.setRequired(false);
        htmlPanelGrid.getChildren().add(intParteIdEditInput);
        
        Message intParteIdEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        intParteIdEditInputMessage.setId("intParteIdEditInputMessage");
        intParteIdEditInputMessage.setFor("intParteIdEditInput");
        intParteIdEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(intParteIdEditInputMessage);
        
        HtmlOutputText datFechaInicioEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        datFechaInicioEditOutput.setId("datFechaInicioEditOutput");
        datFechaInicioEditOutput.setValue("Dat Fecha Inicio: * ");
        htmlPanelGrid.getChildren().add(datFechaInicioEditOutput);
        
        Calendar datFechaInicioEditInput = (Calendar) application.createComponent(Calendar.COMPONENT_TYPE);
        datFechaInicioEditInput.setId("datFechaInicioEditInput");
        datFechaInicioEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.datFechaInicio}", Date.class));
        datFechaInicioEditInput.setNavigator(true);
        datFechaInicioEditInput.setEffect("slideDown");
        datFechaInicioEditInput.setPattern("dd/MM/yyyy");
        datFechaInicioEditInput.setRequired(true);
        htmlPanelGrid.getChildren().add(datFechaInicioEditInput);
        
        Message datFechaInicioEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        datFechaInicioEditInputMessage.setId("datFechaInicioEditInputMessage");
        datFechaInicioEditInputMessage.setFor("datFechaInicioEditInput");
        datFechaInicioEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(datFechaInicioEditInputMessage);
        
        HtmlOutputText datFechaFinEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        datFechaFinEditOutput.setId("datFechaFinEditOutput");
        datFechaFinEditOutput.setValue("Dat Fecha Fin: * ");
        htmlPanelGrid.getChildren().add(datFechaFinEditOutput);
        
        Calendar datFechaFinEditInput = (Calendar) application.createComponent(Calendar.COMPONENT_TYPE);
        datFechaFinEditInput.setId("datFechaFinEditInput");
        datFechaFinEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.datFechaFin}", Date.class));
        datFechaFinEditInput.setNavigator(true);
        datFechaFinEditInput.setEffect("slideDown");
        datFechaFinEditInput.setPattern("dd/MM/yyyy");
        datFechaFinEditInput.setRequired(true);
        htmlPanelGrid.getChildren().add(datFechaFinEditInput);
        
        Message datFechaFinEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        datFechaFinEditInputMessage.setId("datFechaFinEditInputMessage");
        datFechaFinEditInputMessage.setFor("datFechaFinEditInput");
        datFechaFinEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(datFechaFinEditInputMessage);
        
        HtmlOutputText strObservacionesEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        strObservacionesEditOutput.setId("strObservacionesEditOutput");
        strObservacionesEditOutput.setValue("Str Observaciones: * ");
        htmlPanelGrid.getChildren().add(strObservacionesEditOutput);
        
        InputTextarea strObservacionesEditInput = (InputTextarea) application.createComponent(InputTextarea.COMPONENT_TYPE);
        strObservacionesEditInput.setId("strObservacionesEditInput");
        strObservacionesEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.strObservaciones}", String.class));
        LengthValidator strObservacionesEditInputValidator = new LengthValidator();
        strObservacionesEditInputValidator.setMaximum(200);
        strObservacionesEditInput.addValidator(strObservacionesEditInputValidator);
        strObservacionesEditInput.setRequired(true);
        htmlPanelGrid.getChildren().add(strObservacionesEditInput);
        
        Message strObservacionesEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        strObservacionesEditInputMessage.setId("strObservacionesEditInputMessage");
        strObservacionesEditInputMessage.setFor("strObservacionesEditInput");
        strObservacionesEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(strObservacionesEditInputMessage);
        
        HtmlOutputText chrEstadoEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        chrEstadoEditOutput.setId("chrEstadoEditOutput");
        chrEstadoEditOutput.setValue("Chr Estado: * ");
        htmlPanelGrid.getChildren().add(chrEstadoEditOutput);
        
        InputText chrEstadoEditInput = (InputText) application.createComponent(InputText.COMPONENT_TYPE);
        chrEstadoEditInput.setId("chrEstadoEditInput");
        chrEstadoEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.chrEstado}", Character.class));
        chrEstadoEditInput.setRequired(true);
        htmlPanelGrid.getChildren().add(chrEstadoEditInput);
        
        Message chrEstadoEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        chrEstadoEditInputMessage.setId("chrEstadoEditInputMessage");
        chrEstadoEditInputMessage.setFor("chrEstadoEditInput");
        chrEstadoEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(chrEstadoEditInputMessage);
        
        return htmlPanelGrid;
    }

	public HtmlPanelGrid populateViewPanel() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        Application application = facesContext.getApplication();
        ExpressionFactory expressionFactory = application.getExpressionFactory();
        ELContext elContext = facesContext.getELContext();
        
        HtmlPanelGrid htmlPanelGrid = (HtmlPanelGrid) application.createComponent(HtmlPanelGrid.COMPONENT_TYPE);
        
        HtmlOutputText desarrolloProteccionsLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        desarrolloProteccionsLabel.setId("desarrolloProteccionsLabel");
        desarrolloProteccionsLabel.setValue("Desarrollo Proteccions:   ");
        htmlPanelGrid.getChildren().add(desarrolloProteccionsLabel);
        
        HtmlOutputText desarrolloProteccionsValue = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        desarrolloProteccionsValue.setId("desarrolloProteccionsValue");
        desarrolloProteccionsValue.setValue("This relationship is managed from the DesarrolloProteccion side");
        htmlPanelGrid.getChildren().add(desarrolloProteccionsValue);
        
        HtmlOutputText intTipoProteccionIdLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intTipoProteccionIdLabel.setId("intTipoProteccionIdLabel");
        intTipoProteccionIdLabel.setValue("Int Tipo Proteccion Id:   ");
        htmlPanelGrid.getChildren().add(intTipoProteccionIdLabel);
        
        HtmlOutputText intTipoProteccionIdValue = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intTipoProteccionIdValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.intTipoProteccionId}", TablaMaestra.class));
        intTipoProteccionIdValue.setConverter(new TablaMaestraConverter());
        htmlPanelGrid.getChildren().add(intTipoProteccionIdValue);
        
        HtmlOutputText intDependenciaOrigenIdLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intDependenciaOrigenIdLabel.setId("intDependenciaOrigenIdLabel");
        intDependenciaOrigenIdLabel.setValue("Int Dependencia Origen Id:   ");
        htmlPanelGrid.getChildren().add(intDependenciaOrigenIdLabel);
        
        HtmlOutputText intDependenciaOrigenIdValue = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intDependenciaOrigenIdValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.intDependenciaOrigenId}", TablaMaestra.class));
        intDependenciaOrigenIdValue.setConverter(new TablaMaestraConverter());
        htmlPanelGrid.getChildren().add(intDependenciaOrigenIdValue);
        
        HtmlOutputText intDependenciaDestinoIdLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intDependenciaDestinoIdLabel.setId("intDependenciaDestinoIdLabel");
        intDependenciaDestinoIdLabel.setValue("Int Dependencia Destino Id:   ");
        htmlPanelGrid.getChildren().add(intDependenciaDestinoIdLabel);
        
        HtmlOutputText intDependenciaDestinoIdValue = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intDependenciaDestinoIdValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.intDependenciaDestinoId}", TablaMaestra.class));
        intDependenciaDestinoIdValue.setConverter(new TablaMaestraConverter());
        htmlPanelGrid.getChildren().add(intDependenciaDestinoIdValue);
        
        HtmlOutputText intParteIdLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intParteIdLabel.setId("intParteIdLabel");
        intParteIdLabel.setValue("Int Parte Id:   ");
        htmlPanelGrid.getChildren().add(intParteIdLabel);
        
        HtmlOutputText intParteIdValue = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        intParteIdValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.intParteId}", Parte.class));
        intParteIdValue.setConverter(new ParteConverter());
        htmlPanelGrid.getChildren().add(intParteIdValue);
        
        HtmlOutputText datFechaInicioLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        datFechaInicioLabel.setId("datFechaInicioLabel");
        datFechaInicioLabel.setValue("Dat Fecha Inicio:   ");
        htmlPanelGrid.getChildren().add(datFechaInicioLabel);
        
        HtmlOutputText datFechaInicioValue = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        datFechaInicioValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.datFechaInicio}", Date.class));
        DateTimeConverter datFechaInicioValueConverter = (DateTimeConverter) application.createConverter(DateTimeConverter.CONVERTER_ID);
        datFechaInicioValueConverter.setPattern("dd/MM/yyyy");
        datFechaInicioValue.setConverter(datFechaInicioValueConverter);
        htmlPanelGrid.getChildren().add(datFechaInicioValue);
        
        HtmlOutputText datFechaFinLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        datFechaFinLabel.setId("datFechaFinLabel");
        datFechaFinLabel.setValue("Dat Fecha Fin:   ");
        htmlPanelGrid.getChildren().add(datFechaFinLabel);
        
        HtmlOutputText datFechaFinValue = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        datFechaFinValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.datFechaFin}", Date.class));
        DateTimeConverter datFechaFinValueConverter = (DateTimeConverter) application.createConverter(DateTimeConverter.CONVERTER_ID);
        datFechaFinValueConverter.setPattern("dd/MM/yyyy");
        datFechaFinValue.setConverter(datFechaFinValueConverter);
        htmlPanelGrid.getChildren().add(datFechaFinValue);
        
        HtmlOutputText strObservacionesLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        strObservacionesLabel.setId("strObservacionesLabel");
        strObservacionesLabel.setValue("Str Observaciones:   ");
        htmlPanelGrid.getChildren().add(strObservacionesLabel);
        
        InputTextarea strObservacionesValue = (InputTextarea) application.createComponent(InputTextarea.COMPONENT_TYPE);
        strObservacionesValue.setId("strObservacionesValue");
        strObservacionesValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.strObservaciones}", String.class));
        strObservacionesValue.setReadonly(true);
        strObservacionesValue.setDisabled(true);
        htmlPanelGrid.getChildren().add(strObservacionesValue);
        
        HtmlOutputText chrEstadoLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        chrEstadoLabel.setId("chrEstadoLabel");
        chrEstadoLabel.setValue("Chr Estado:   ");
        htmlPanelGrid.getChildren().add(chrEstadoLabel);
        
        HtmlOutputText chrEstadoValue = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        chrEstadoValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{proteccionBean.proteccion.chrEstado}", String.class));
        htmlPanelGrid.getChildren().add(chrEstadoValue);
        
        return htmlPanelGrid;
    }

	public Proteccion getProteccion() {
        if (proteccion == null) {
            proteccion = new Proteccion();
        }
        return proteccion;
    }

	public void setProteccion(Proteccion proteccion) {
        this.proteccion = proteccion;
    }

	public List<DesarrolloProteccion> getSelectedDesarrolloProteccions() {
        return selectedDesarrolloProteccions;
    }

	public void setSelectedDesarrolloProteccions(List<DesarrolloProteccion> selectedDesarrolloProteccions) {
        if (selectedDesarrolloProteccions != null) {
            proteccion.setDesarrolloProteccions(new HashSet<DesarrolloProteccion>(selectedDesarrolloProteccions));
        }
        this.selectedDesarrolloProteccions = selectedDesarrolloProteccions;
    }

	public List<TablaMaestra> completeIntTipoProteccionId(String query) {
        List<TablaMaestra> suggestions = new ArrayList<TablaMaestra>();
        for (TablaMaestra tablaMaestra : tablaMaestraService.findAllTablaMaestras()) {
            String tablaMaestraStr = String.valueOf(tablaMaestra.getStrDescripcion() +  " "  + tablaMaestra.getChrEstado() +  " "  + tablaMaestra.getIntTablaId());
            if (tablaMaestraStr.toLowerCase().startsWith(query.toLowerCase())) {
                suggestions.add(tablaMaestra);
            }
        }
        return suggestions;
    }

	public List<TablaMaestra> completeIntDependenciaOrigenId(String query) {
        List<TablaMaestra> suggestions = new ArrayList<TablaMaestra>();
        for (TablaMaestra tablaMaestra : tablaMaestraService.findAllTablaMaestras()) {
            String tablaMaestraStr = String.valueOf(tablaMaestra.getStrDescripcion() +  " "  + tablaMaestra.getChrEstado() +  " "  + tablaMaestra.getIntTablaId());
            if (tablaMaestraStr.toLowerCase().startsWith(query.toLowerCase())) {
                suggestions.add(tablaMaestra);
            }
        }
        return suggestions;
    }

	public List<TablaMaestra> completeIntDependenciaDestinoId(String query) {
        List<TablaMaestra> suggestions = new ArrayList<TablaMaestra>();
        for (TablaMaestra tablaMaestra : tablaMaestraService.findAllTablaMaestras()) {
            String tablaMaestraStr = String.valueOf(tablaMaestra.getStrDescripcion() +  " "  + tablaMaestra.getChrEstado() +  " "  + tablaMaestra.getIntTablaId());
            if (tablaMaestraStr.toLowerCase().startsWith(query.toLowerCase())) {
                suggestions.add(tablaMaestra);
            }
        }
        return suggestions;
    }

	public List<Parte> completeIntParteId(String query) {
        List<Parte> suggestions = new ArrayList<Parte>();
        for (Parte parte : parteService.findAllPartes()) {
            String parteStr = String.valueOf(parte.getStrNombre() +  " "  + parte.getStrApellidoParterno() +  " "  + parte.getStrApellidoMaterno() +  " "  + parte.getIntEdad());
            if (parteStr.toLowerCase().startsWith(query.toLowerCase())) {
                suggestions.add(parte);
            }
        }
        return suggestions;
    }

	public String onEdit() {
        if (proteccion != null && proteccion.getDesarrolloProteccions() != null) {
            selectedDesarrolloProteccions = new ArrayList<DesarrolloProteccion>(proteccion.getDesarrolloProteccions());
        }
        return null;
    }

	public boolean isCreateDialogVisible() {
        return createDialogVisible;
    }

	public void setCreateDialogVisible(boolean createDialogVisible) {
        this.createDialogVisible = createDialogVisible;
    }

	public String displayList() {
        createDialogVisible = false;
        findAllProteccions();
        return "proteccion";
    }

	public String displayCreateDialog() {
        proteccion = new Proteccion();
        createDialogVisible = true;
        return "proteccion";
    }

	public String persist() {
        String message = "";
        if (proteccion.getIntProteccionId() != null) {
            proteccionService.updateProteccion(proteccion);
            message = "Successfully updated";
        } else {
            proteccionService.saveProteccion(proteccion);
            message = "Successfully created";
        }
        RequestContext context = RequestContext.getCurrentInstance();
        context.execute("createDialog.hide()");
        context.execute("editDialog.hide()");
        
        FacesMessage facesMessage = new FacesMessage(message);
        FacesContext.getCurrentInstance().addMessage(null, facesMessage);
        reset();
        return findAllProteccions();
    }

	public String delete() {
        proteccionService.deleteProteccion(proteccion);
        FacesMessage facesMessage = new FacesMessage("Successfully deleted");
        FacesContext.getCurrentInstance().addMessage(null, facesMessage);
        reset();
        return findAllProteccions();
    }

	public void reset() {
        proteccion = null;
        selectedDesarrolloProteccions = null;
        createDialogVisible = false;
    }

	public void handleDialogClose(CloseEvent event) {
        reset();
    }
}
